###############################################################
#super:
#   first argument  is:  class
#   second argument is:  associated object or class if we have class method

class A(object):
    def metodaX(self):
        print "# A.methodX"
        return "This"
 
class B(A):
    def metodaX(self):
        print "# B.methodX"
        return super(B, self).metodaX() + " is"
 
class C(B):
    def metodaX(self):
        print "# C.methodX"
        return super(C, self).metodaX() + " a"
 
    def metodaY(self):
        print "# C.methodY"
        return super(C, self).metodaX() + " text."

x = C()
print x.metodaX()           # "This is a"
print x.metodaY()           # "This is text.
print super(C, x).metodaX() # "This is"
print super(B, x).metodaX() # "This"
